package api

import (
	"gitee.com/tang_q/gin-vue3-admin-api/global"
	"gitee.com/tang_q/gin-vue3-admin-api/model"
	"gitee.com/tang_q/gin-vue3-admin-api/model/dto"
	"github.com/gin-gonic/gin"
	"strconv"
)

type MenuApi struct {
	BaseApi
}

func NewMenuApi() MenuApi {
	return MenuApi{
		BaseApi: NewBaseApi(),
	}
}

func (m MenuApi) GetMenuList(c *gin.Context) {
	m.ctx = c
	menuList, err := model.GetMenusList()
	if err != nil {
		global.Logger.Error(err)
		m.Fail(201, "获取菜单和API失败", nil)
		return
	}
	m.Success("获取菜单和API成功", menuList)
}

func (m MenuApi) CreateMenu(c *gin.Context) {
	m.ctx = c
	createMenu := dto.CreateMenuDTO{}
	if err := c.ShouldBindJSON(&createMenu); err != nil {
		m.Fail(201, "参数错误:"+err.Error(), nil)
		return
	}
	menu := model.Menus{}
	err := menu.CreateMenu(createMenu)
	if err != nil {
		global.Logger.Error(err)
		m.Fail(201, "创建菜单失败", nil)
		return
	}
	m.Success("创建菜单成功", nil)
}

func (m MenuApi) AddChildItem(c *gin.Context) {
	m.ctx = c
	data := dto.AddMenuOrAPIDTO{}
	if err := c.ShouldBindJSON(&data); err != nil {
		m.Fail(201, "参数错误:"+err.Error(), nil)
		return
	}
	menus := &model.Menus{}
	err := menus.AddChildItem(data)
	if err != nil {
		global.Logger.Error(err)
		if err.Error() == "首页菜单不能添加子菜单" {
			m.Fail(201, "首页菜单不能添加子菜单", nil)
			return
		}
		m.Fail(201, "添加失败", nil)
		return
	}
	m.Success("添加成功", nil)
}
func (m MenuApi) UpdateMenu(c *gin.Context) {
	m.ctx = c
	data := dto.EditMenuDTO{}
	if err := c.ShouldBindJSON(&data); err != nil {
		m.Fail(201, "参数错误:"+err.Error(), nil)
		return
	}
	menu := &model.Menus{}
	err := menu.Update(data)
	if err != nil {
		global.Logger.Error(err)
		m.Fail(201, "更新失败", nil)
		return
	}
	m.Success("更新成功", nil)
}

func (m MenuApi) DeleteMenu(c *gin.Context) {
	m.ctx = c
	id, _ := strconv.ParseUint(c.Query("id"), 10, 64)
	err := model.DeleteMenu(uint(id))
	if err != nil {
		global.Logger.Error(err)
		m.Fail(201, "删除失败", nil)
		return
	}
	m.Success("删除成功", nil)
}
